1 GOTO 100 2 SAVE"JUMP START.PGML",8 3 REM 4 REM 5 REM 6 VERIFY"JUMP START.PGML",8 10 SYS4096*9: REM RE-ENABLE METABASIC AFTER RUN-STOP/RESTORE 11 KEY 1,"[147]LIST":REM SET KEYS-METABASIC 12 REM 13 REM 14 KEY 2,"[147]LLIST" 15 REM 16 REM 17 KEY 3,"[147]RUN_" 18 REM 19 REM 20 KEY 4,"[147]": REM LIST SECTION IN DEVEL 21 REM 22 REM 23 KEY 5,"[147]": REM LIST A REF SECTION 24 REM 25 REM 26 KEY 6,"[147]FIND@" 27 REM 28 REM 29 KEY 7,"DELETE" 30 REM 31 REM 40 REM 10000 * PRINT A PGM LISTING 42 REM 11000 * PRINT SCREEN ROUTINE 44 REM 11200 * DISPLAY DIRECTORY **** 46 REM 12000 * RTN TO OPEN/READ FILE(S) 48 REM 12300 * DECIMAL FORMAT ROUTINE 50 REM 12400 * 5 OPTION SUB MENU 52 REM 13000 * GENERIC SHELL SORT 100 REM ************* NUMERIC VARIABLES 101 A=0 : REM TELLS SORT # OF ENTRIES 102 B=0 : REM BINARY VALUE OF HIGH MIDDLE OF MATRIX 103 C=0 : REM MOVING POINTER TO COMPARE CURRENT POSITION TO FIXED HIGHER POS 104 D=0 : REM 'FIXED' HIGHER POS POINTER 110 TB=8: REM TAB VALUE FOR OPTIONS 120 SL=0: REM CHOICE OF OPTION 130 C1=.5: REM CONSTANT NEEDED @ 12300 132 C2=1: REM CONSTANT NNEDED @ 12300 134 C3=100: REM CONSTANT NEEDED @ 12300 140 NA=0: REM NEXT ADDRESS (12000) 141 NN=0: REM COUNTER (12000) 142 MX=0: REM = MAX SIZE OF ARRAY (12000) 143 T =0: REM RECEIVES ASCII VAL OF INPUT 150 V=0 : REM SEE 12302 151 FR=0: REM SEE 12330 - FRACTION 152 LO=0: REM SEE 12330 153 J=0 : REM SEE 12320 200 REM **** MAIN MENU OPTIONS 210 TL$="PROGRAM TITLE HERE" 221 O1$="OPT #1" : REM MAIN MENU OPT 1 222 O2$="OPT #2" : REM MAIN MENU OPT 2 223 O3$="OPT #3" : REM ETC. 224 O4$="OPT #4" 225 O5$="NOT ACTIVE" 226 O6$="NOT ACTIVE" 227 O7$="NOT ACTIVE" 228 O8$="NOT ACTIVE" 229 O9$="CALCULATE FREE SPACE" 230 O0$="PRINT SCREEN" 239 REM ***** STRING VARIABLES 240 A$=" ": REM SEE 12000 245 N$=" ": REM SEE 12360-FORMATTED DEC 300 REM ARRAY DIMENSIONS DEFINED HERE 310 DIM M(20): REM SAMPLE ARRAY TO BE SORTED - SEE 13000 400 REM **** MAIN MENU HANDLER ***** 410 PRINT"[147]":PRINTTAB((40-LEN(TL$))/2);TL$:REM PROGRAM TITLE - CENTERED 420 PRINT 430 PRINTTAB(TB)"[144] 1.[146] ";O1$:PRINT 435 PRINTTAB(TB)" 2.[146] ";O2$:PRINT 440 PRINTTAB(TB)" 3.[146] ";O3$:PRINT 445 PRINTTAB(TB)"[159] 4.[146] ";O4$:PRINT 450 PRINTTAB(TB)"[156] 5.[146] ";O5$:PRINT 455 PRINTTAB(TB)" 6.[146] ";O6$:PRINT 460 PRINTTAB(TB)" 7.[146] ";O7$:PRINT 465 PRINTTAB(TB)"[158] 8.[146] ";O8$:PRINT 470 PRINTTAB(TB)"[144] 9.[146] ";O9$:PRINT 475 PRINTTAB(TB)"10.[146] ";O0$:PRINT 480 PRINT"YOUR SELECTION, PLEASE";:INPUT SL 485 IF SL<1 OR SL>10 THEN 400 489 REM LABEL- / / / / / / / / / / 490 ON SL GOTO 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 11000 498 REM LINE 489 ALLOWS 4 CHARACTER LABELS ABOVE CORRESPONDING GOTO ADDRESS TO 499 REM HELP TROUBLE SHOOTING & MAINT 500 REM INITIALIZING SUB-ROUTINE 1 600 REM INITIALIZING SUB-ROUTINE 2 700 REM INITIALIZING SUB-ROUTINE 3 800 REM INITIALIZING SUB-ROUTINE 4 900 REM INITIALIZING SUB-ROUTINE 5 1000 REM **************** OPTION 1 1004 PRINT"[147]" 1005 PRINT"YOU HAVE CHOSEN OPTION 1" 1010 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO400:REM CODE THIS OPTION FOLLOWS 2000 REM **************** OPTION 2 2004 PRINT"[147]" 2005 PRINT"YOU HAVE CHOSEN OPTION 2" 2010 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO400:REM CODE THIS OPTION FOLLOWS 3000 REM **************** OPTION 3 3004 PRINT"[147]" 3005 PRINT"YOU HAVE CHOSEN OPTION 3" 3010 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO400:REM CODE THIS OPTION FOLLOWS 4000 REM **************** OPTION 4 4010 PRINT"[147]" 4020 PRINT"1 -SUB OPT 1-TEXT":PRINT 4025 PRINT"2 -SUB OPT 2-TEXT":PRINT 4030 PRINT"3 -SUB OPT 3-TEXT":PRINT 4035 PRINT"4 -SUB OPT 4-TEXT":PRINT 4040 PRINT"5 -EXIT":PRINT 4050 INPUT"ENTER YOUR OPTION #"; SL 4060 IF SL <1 OR SL >5 THEN GOTO 4010 4070 ON SL GOTO 4100,4200,4300,4400,4500 4080 GOTO 4000 4100 REM ***** OPTION 1 4105 PRINT"YOU HAVE CHOSEN SUB-OPT 1" 4110 PRINT"SHIFT-RETURN TO SUB ":WAIT653,1:GOTO4000:REM CODE FOLLOWS 4199 GOTO4000 4200 REM ***** OPTION 2 4205 PRINT"YOU HAVE CHOSEN SUB-OPT 2" 4210 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO4000:REM CODE FOLLOWS 4299 GOTO4000 4300 REM ***** OPTION 3 4305 PRINT"YOU HAVE CHOSEN SUB-OPT 3" 4310 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO4000:REM CODE FOLLOWS 4399 GOTO4000 4400 REM ***** OPTION 4 4405 PRINT"YOU HAVE CHOSEN SUB-OPT 4" 4410 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO4000:REM CODE FOLLOWS 4499 GOTO4000 4500 REM ***** OPTION 5 - EXIT TO MAIN MENU 4505 PRINT"YOU HAVE CHOSEN SUB-OPT 5" 4510 PRINT"SHIFT-RETURN TO MAIN":WAIT653,1:GOTO400:REM CODE FOLLOWS 5000 REM **************** OPTION 5 5010 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR THIS OPTION FOLLOWS 6000 REM **************** OPTION 6 6010 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR THIS OPTION FOLLOWS 7000 REM **************** OPTION 7 7010 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR THIS OPTION FOLLOWS 8000 REM **************** OPTION 8 8010 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR THIS OPTION FOLLOWS 9000 REM **************** FREE SPACE 9005 PRINT FRE(0) - (FRE(0)<0)*65536 9010 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR THIS OPTION FOLLOWS 10000 REM *************** PRINT LISTING 10010 OPEN4,4:CMD4:LIST::PRINT#4:CLOSE4:REM - WITH METABASIC, USE LLIST INSTEAD 10020 PRINT"SHIFT TO RETURN":WAIT653,1:GOTO400:REM CODE FOR OPTION FOLLOWS 11000 REM ******** PRINT SCREEN ROUTINE 11010 PRINT""; :REM CLEAR SCREEN 11020 OPEN 3,3,3 :REM OPEN SCREEN AS DEVICE 3 FOR INPUT 11030 OPEN 4,4,0 :REM OPEN PRINTER AS DEV 4 FOR OUTPUT 11040 FOR I = 0 TO1024:REM 1024 SCREEN POSITIONS 11050 :GET#3,A$ :REM GET SCREEN DATA 11060 :PRINT#4,A$; :REM PRINT SCREEN DATA 11070 NEXT :REM REPEAT 1024 TIMES 11080 PRINT#4 :REM FINAL PRINT 11090 CLOSE3 :REM CLOSE DEV 3 11100 CLOSE4 :REM CLOSE DEV 4 11110 GOTO400 :REM RETURN MAIN MENU 11200 REM ******DISPLAY DIRECTORY **** 11210 OPEN 2,8,0,"$":PRINT"[147]" 11220 GET#2,A$:GET#2,A$ 11230 GET#2,L$:GET#2,L$:IFST=64THENCLOSE2:RETURN 11240 GET#2,LB$:GET#2,HB$:LN=ASC(LB$+CHR$(0))+256*ASC(HB$+CHR$(0)) 11250 PRINT LN; 11260 GET#2,A$:IFA$=""THEN PRINTCHR$(13);:GOTO11230 11270 PRINTA$;:GOTO11260 12000 REM SUBRTN TO OPEN/READ FILE(S) 12010 INPUT"ENTER NAME OF FILE";F$ 12020 OPEN 2,8,2,F$:NN=0 12040 GET#2,A$:GET$2,A$ 12050 GET#2,A$:IF ST<>0THEN 12110 12060 REM 31 '_' IS CARRIAGE RETURN 12070 T = ASC(A$+"@") 12080 IF T=31 THEN NA=NN+1:GOTO12090 12085 IF NN>MXTHENPRINT"ARRAY NOT LARGE ENOUGH":GOTO12120 12090 N$(NN)=N$(NN)+A$:NN=NA 12100 GOTO12050 12110 N$(NN)=N$(NN)+CHR$(31) 12120 CLOSE#2:RETURN 12300 REM DECIMAL FORMAT ROUTINE 12302 REM EXPECTS-V=VALUE TO ROUND/PRT 12303 REM EXPECTS-C1=.5,C2=1,C3=100 12304 REM RETURNS-N$ 12305 N$=STR$(INT(V*C3+C1)/C3) 12310 LO=LEN(N$) 12320 FOR J = 2 TO LO 12330 :IF MID$(N$,J,1)="." THEN FR = LO-J:J = LO 12340 NEXT 12350 ON FR+C2 GOTO 12370,12380,12390 12360 N$=LEFT$(N$,LO-FR+2): GOTO12390 12370 N$=N$+".00":RETURN 12380 N$=N$+"0" 12390 FR=0:RETURN 12400 REM **** 5 OPTION SUB MENU **** 12405 REM COPY AND RENUMBER THIS CODE TO ANY SECTION OF CODE WHERE NEEDED! 12406 REM ADD THE CORRECT OPTION NAMES BETWEEN THE QUOTES IN 12420 - 12440 12410 PRINT"[147]" 12420 PRINT"1 -SUB OPT 1-TEXT":PRINT 12425 PRINT"2 -SUB OPT 2-TEXT":PRINT 12430 PRINT"3 -SUB OPT 3-TEXT":PRINT 12435 PRINT"4 -SUB OPT 4-TEXT":PRINT 12440 PRINT"5 -EXIT":PRINT 12450 INPUT"ENTER YOUR OPTION #"; SL 12460 IF SL <1 OR >5 THEN GOTO 12400 12470 ON SL GOTO 12500,12600,12700,12800,12900 12480 GOTO 400 12500 REM ***** OPTION 1 12599 GOTO12400 12600 REM ***** OPTION 2 12699 GOTO12400 12700 REM ***** OPTION 3 12799 GOTO12400 12800 REM ***** OPTION 4 12899 GOTO12400 12900 REM ***** OPTION 5 - EXIT TO MAIN MENU 12999 GOTO400 13000 REM GENERIC SHELL SORT 13001 REM ROUTINE EXPECTS A=THE NUMBER OF ROWS IN THE MATRIX (M) TO BE SORTED 13002 REM BY ADJUSTING M(C) ETC STATEMENTS, CAN SORT ANY FIELD ON ANY ARRAY 13003 REM 13004 PRINT"[147]": REM CLEAR SCREEN 13005 B=1: REM FIND THE VALUE OF THE INDEX WHICH IS 13006 REM JUST > A 13010 B=B*2: REM DOUBLE B 13012 IF B <= A THEN 13010: REM DOUBLE AGAIN 13020 B = INT(B/2): REM ELSE, GET HIGH 'MIDDLE' OF MATRIX 13024 IF B = 0 THEN GOTO 400: REM 0=DONE-RETURN TO MAIN MENU OR CALLING 13025 REM ROUTINE 13030 FOR I = 1 TO A-B: REM START SORT 13032 :C = I: REM SET CURRENT MATRIX POINTER BASED ON 13033 : REM PROGRESS OF THIS LOOP 13040 :D = C + B: REM SET HIGH(D) POINTER = TO CURRENT POS 13041 : REM + CURRENT '1/2' MARK 13042 :IF M(C) <= M(D) THEN 13060: REM IF CURRENT POS VAL <= HIGH POS VAL-OK 13050 : SV = M(C): REM ELSE, SAVE CURRENT POS VALUE 13052 : M(C) = M(D): REM MOVE SMALLER(D) POS VALUE TO CURRENT(C) 13053 : REM POSITION 13054 : M(D) = SV: REM PUT ORIGINAL(C) VALUE IN HIGHER SPOT(D) 13055 : REM IN MATRIX 13060 NEXT: REM DO NEXT COMPARISON 13062 GOTO 13020: REM MAKE A NEW '1/2' MARK LOWER THAN PREV. 13070 REM SHELL SORT ADAPTED FROM A SHELL SORT PRINTED IN COMPUTE! DEC 1982 14000 REM *** 5 OPTION SUB MENU *** 40025 PRINT"2 -SUB OPT 2-TEXT":PRINT